/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import DAOS.DAORutas;
import Modelos.Ruta;
import Vistas.VRuta;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


public class ControladorRuta extends KeyAdapter implements ActionListener, KeyListener
{
    private VRuta vruta;
    private DAORutas rutasDAO;
    private Ruta rutab;
     RutaObjetoEstado rutaObjetoEstado;

    public ControladorRuta() 
    {
        super();
        vruta = new VRuta();
        rutasDAO = new DAORutas();
        rutab = new Ruta();
        rutaObjetoEstado = new RutaObjetoEstado();
        vruta.agregarListener(this);
        vruta.setLocationRelativeTo(null);
        vruta.setVisible(true);
        
    
        CargarTablaRutas();
        
                vruta.getTxtCodigo().addKeyListener(new KeyAdapter()
    { 

        @Override
        public void keyTyped(KeyEvent e) 
        {     
             
            
            String Cadena=vruta.getTxtCodigo().getText();
            if (Cadena.length()==10)
            {  
                e.consume();   
                return;
            } 
            
            
        }
        
         @Override
        public void keyPressed(KeyEvent e) 
        {
            codigokeyPressed(e);            
        }
        
    }
                 
                 
    );
        
     
          
       
    }
    
        private void codigokeyPressed(KeyEvent e)    
{
          String Cadena;
          Ruta ruta=new Ruta();
          Cadena = vruta.getTxtCodigo().getText();
          vruta.getTxtCodigo().setText(Cadena.toUpperCase());
         
             if (e.getKeyChar()==10 && Cadena.length() < 10) 

        {
              ruta=rutasDAO.buscarRuta(Cadena); 

               vruta.getTxtDestino().setText(ruta.getDestino());
               vruta.getTxtPrecio().setText(String.valueOf(ruta.getPrecio()));
               vruta.getCmbTipo().setSelectedItem(ruta.getTipoRuta());


               enableBotones(true);
               vruta.getBtnGuardar().setEnabled(false);
               vruta.getBtnNuevo().setEnabled(false);
               enableTxt(true);
               vruta.getTxtCodigo().setEnabled(false);



              vruta.mostrarMensaje("La ruta ya existe");
//      
//            else
//      {
// 
//          enableBotones(false);
//          vruta.getBtnGuardar().setEnabled(true);
//          vruta.getBtnCancelar().setEnabled(true);
//          enableTxt(true);
//          vruta.getCmbTipo().requestFocus();
//          
//      }
//      


   }

}
        
        private void enableTxt(boolean Status)    
        {
              vruta.getTxtCodigo().setEnabled(!Status);
              vruta.getTxtDestino().setEnabled(Status);
              vruta.getTxtPrecio().setEnabled(Status);
              vruta.getCmbTipo().setEnabled(Status);
   
        } 
    
        private void Limpiar()    
            {
              vruta.getTxtCodigo().setText("");
              vruta.getTxtDestino().setText("");
              vruta.getTxtPrecio().setText("");
              vruta.getCmbTipo().setSelectedIndex(0);
            }    
    
     private void enableBotones(boolean Status)
    {
         vruta.getBtnGuardar().setEnabled(Status);
        vruta.getBtnActualizar().setEnabled(Status);
        vruta.getBtnEliminar().setEnabled(Status);
        vruta.getBtnCancelar().setEnabled(Status);
        vruta.getBtnNuevo().setEnabled(Status);
        vruta.getBtnBuscar().setEnabled(Status);
    }

    
 
      private void CargarTablaRutas()
              
              
   {
      
    int Fila;
    Ruta ruta=new Ruta();
    
    rutasDAO.getRutaLista().clear();
    rutasDAO.cargarRutas();
    vruta.getTabRutas().removeAll();

    for (Fila=0;Fila<rutasDAO.getRutaLista().size();Fila++)
    {
       ruta=rutasDAO.getRutaLista().get(Fila);

       vruta.getTabRutas().setValueAt(ruta.getCodRuta(), Fila, 0);
       vruta.getTabRutas().setValueAt(ruta.getTipoRuta(), Fila, 1);
       vruta.getTabRutas().setValueAt(ruta.getDestino(), Fila, 2);
       vruta.getTabRutas().setValueAt(ruta.getPrecio(), Fila, 3);

    }     
    

   }
      
       public void actualizarRuta()
        {
            rutasDAO = new DAORutas();
            rutasDAO.actualizarRutas(vruta.getTxtCodigo().getText(),vruta.getCmbTipo().getSelectedItem().toString(),vruta.getTxtDestino().getText(),Float.parseFloat(vruta.getTxtPrecio().getText()));
            vruta.mostrarMensaje("La cooperativa ha sido Actualizada exitosamente");
            Limpiar();
            enableTxt(false);
            vruta.getTxtCodigo().setEnabled(true);
            vruta.getTxtCodigo().requestFocus();
            vruta.getBtnActualizar().setEnabled(false);
            vruta.getBtnEliminar().setEnabled(false);
            vruta.getBtnNuevo().setEnabled(true);
            CargarTablaRutas();
        }
       
       public void deshacerCambiosRuta()
        {
            rutasDAO = new DAORutas();
            rutaObjetoEstado.restaurarEstadoRuta(rutab);
            rutasDAO.actualizarRutas(rutab.getCodRuta(),rutab.getTipoRuta(),rutab.getDestino(),rutab.getPrecio());
            vruta.mostrarMensaje("La ruta ha sido restaurada exitosamente");
          
            CargarTablaRutas();
        }
       
     public void eliminarRuta()
        {
            rutasDAO = new DAORutas();
            rutasDAO.eliminarRutas(vruta.getTxtCodigo().getText());
            vruta.mostrarMensaje("La cooperativa ha sido eliminada exitosamente");
            Limpiar();
            enableTxt(false);
            enableBotones(false);
            
            vruta.getBtnBuscar().setEnabled(true);
            vruta.getBtnNuevo().setEnabled(true);
            vruta.getBtnSalir().setEnabled(true);
            vruta.getBtnCancelar().setEnabled(true);
            vruta.getTxtCodigo().setEnabled(true);
            vruta.getTxtCodigo().requestFocus();
            
            CargarTablaRutas();
        }
    

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource().equals(vruta.getBtnNuevo()))
            {
                    
                
                enableBotones(false);
                vruta.getBtnGuardar().setEnabled(true);
                vruta.getBtnCancelar().setEnabled(true);
                
                enableTxt(true);
                Limpiar();
                vruta.getTxtCodigo().setEnabled(true);
                vruta.getTxtCodigo().requestFocus();

            
            }
        
        if (e.getSource().equals(vruta.getBtnCancelar()))
      {
          
          enableBotones(false);
                enableTxt(false);
                
                Limpiar();
                
                vruta.getBtnCancelar().setEnabled(true);
                vruta.getBtnBuscar().setEnabled(true);
                vruta.getBtnNuevo().setEnabled(true);
                vruta.getBtnSalir().setEnabled(true);
                
                vruta.getTxtCodigo().setEnabled(true);
                vruta.getTxtCodigo().requestFocus();
      }
              
       if (e.getSource().equals(vruta.getBtnBuscar()))
       {
          String Cadena;
        
          Cadena = vruta.getTxtCodigo().getText();
          vruta.getTxtCodigo().setText(Cadena.toUpperCase());
      
   
             if (Cadena.length() > 0) 
       
        {
              rutab=rutasDAO.buscarRuta(Cadena);
             
              rutaObjetoEstado.guardarEstadoRuta(rutab);

               vruta.getTxtDestino().setText(rutab.getDestino());
               vruta.getTxtPrecio().setText(String.valueOf(rutab.getPrecio()));
               vruta.getCmbTipo().setSelectedItem(rutab.getTipoRuta());


               enableBotones(true);
               enableTxt(true);
               vruta.getTxtCodigo().setEnabled(false);



              vruta.mostrarMensaje("La ruta ya existe");

//                 else
//           {
//
//               enableBotones(false);
//               vruta.getBtnGuardar().setEnabled(true);
//               vruta.getBtnCancelar().setEnabled(true);
//               enableTxt(true);
//               vruta.getCmbTipo().requestFocus();
//
//           }

        }
       }
       
       if (e.getSource().equals(vruta.getBtnGuardar()))
       {
           if (vruta.getCmbTipo().getSelectedIndex() == 0)
           {
               vruta.mostrarMensaje("Seleccione el tipo de ruta");
               vruta.getCmbTipo().requestFocus();
               return;
           }
           
           if (vruta.getTxtDestino().getText().trim().length() ==0)
           {
               vruta.mostrarMensaje("El campo destino no puede estar vacio");
               vruta.getTxtDestino().requestFocus();
               return;
           }
           
           if (vruta.getTxtPrecio().getText().trim().length() == 0)
           {
               vruta.mostrarMensaje("El campo precio no puede estar vacio");
               vruta.getTxtDestino().requestFocus();
               return;
           }
           
           String codigo = vruta.getTxtCodigo().getText();
           String tipo = vruta.getCmbTipo().getSelectedItem().toString();
           String destino = vruta.getTxtDestino().getText();
           float precio = Float.parseFloat(vruta.getTxtPrecio().getText());
           
           Ruta ruta = new Ruta(codigo,tipo,destino,precio);
           
           rutasDAO.registrarRuta(ruta);
        
           CargarTablaRutas();
           
           vruta.mostrarMensaje("Se ha agregado una nueva ruta");
           
           enableBotones(false);
           enableTxt(false);
           Limpiar();
           
           vruta.getTxtCodigo().requestFocus();
           vruta.getTxtCodigo().setEnabled(true);
           
           vruta.getBtnBuscar().setEnabled(true);
           vruta.getBtnNuevo().setEnabled(true);
           vruta.getBtnCancelar().setEnabled(true);
           vruta.getBtnSalir().setEnabled(true);

           
       }
       
       if(e.getSource().equals(vruta.getBtnSalir()))
       {
           vruta.dispose();
       }
        if(e.getSource().equals(vruta.getBtnActualizar()))
       {
           actualizarRuta();
       }
         if(e.getSource().equals(vruta.getBtnEliminar()))
       {
           eliminarRuta();
       }
          if(e.getSource().equals(vruta.getBtnDeshacer()))
       {
           deshacerCambiosRuta();
       }
    
    }
    
}